UiaApp 和 AirApp 的区别
UiaApp 和 AirApp 的区别
UiaApp 和 AirApp 通常是指在自动化测试或自动化操作中使用的概念或框架,尤其是在UI自动化测试领域。它们的区别主要在于它们所依赖的技术、应用场景和功能特性。
UiaApp (UI Automation Application)
UiaApp 通常基于 Microsoft 的 UI Automation 技术。UI Automation 是一种 Microsoft 技术,用于自动化和测试 Windows 桌面应用的用户界面,支持访问和操作界面元素,包括但不限于按钮、菜单和文本框。
主要用于 Windows 应用程序的自动化测试,可以支持桌面应用、Windows Store 应用等。它提供了一套丰富的 API 来操作和检查UI元素的属性,支持键盘和鼠标操作,可以用于执行复杂的UI测试场景。
AirApp(Airtest)
AirApp 是基于图像识别实现的 UI 自动化测试框架,支持 Android、iOS、Windows、Mac 等多个平台。它可以用于自动化测试、自动化脚本编写、游戏开发等多个领域。
图像识别技术在 UI 自动化测试中的一个关键应用是能够识别和操作屏幕上的元素,即使没有可访问的内部对象标识符或 DOM 结构。这使得图像识别特别适合于那些难以通过传统自动化工具访问的应用程序,例如游戏、原生应用程序,或者包含复杂动画和视觉效果的UI。
两者的区别
-
UiaApp:基于 UIA 实现的程序,通过 UI 组件的 ID、Name、Class 等定位对应的元素,然后对其进行操作,类似 HTML 的 DOM 树,可以通过选择器定位元素和操作,例如:
$(".btn").click();。 -
AirApp:是基于图像识别实现。
UiaApp 的原理
应用程序的用户界面元素能够被UI Automation识别和交互的原因,在于应用程序和 UI Automation 框架之间遵循了一套共同的标准和协议。这种能力主要得益于 以下几个方面的合作和实现:
1. 应用程序的UI框架支持
大多数现代UI框架(如.NET的WPF和Windows Forms、UWP等)已经内置了对UI Automation的支持。这意味着使用这些框架开发的应用程序会自动公开其UI元素给UI Automation客户端。开发者无需编写额外的代码,他们的应用界面元素就可以被UI Automation访问。这是因为这些框架已经实现了UI Automation的Provider接口,用来描述并公开界面元素的信息。
2. 标准化的属性和控件模式
UI Automation 定义了一系列标准属性(如元素的ID、名称、控件类型等)和控件模式(如InvokePattern、ValuePattern等),这些都是描述和操作界面元素的共同语言。当应用程序使用支持 UI Automation 的 UI 框架时,这些框架会为每个 UI 元素自动分配这些属性和模式。这样,无论应用程序的具体实现细节如何,UI Automation 客户端都可以使用相同的方法来查询和操作这些元素。
3. 提供程序和客户端协议
UI Automation 的工作机制基于提供程序(Provider)和客户端(Client)之间的通信协议。应用程序作为提供程序,通过 UI 框架或直接实现 UI Automation 接口,以标准化的方式公开其 UI 元素。UI Automation 客户端(如自动化测试工具或辅助技术应用)则通过这些接口查询和操作 UI 元素。这种协议确保了不同的客户端可以以统一的方式与各种应用程序交互。
4. 操作系统的角色
操作系统(特别是Windows)在UI Automation中起着桥接的作用。Windows提供了 UI Automation 的核心服务和API,使得应用程序和客户端之间的通信成为可能。这也意味着UI Automation 的能力和性能在一定程度上受到操作系统支持的限制和优化。
如何判断一个应用是否支持 UIA
判断一个应用是否支持 UIA 可以使用微软官方提供的软件 Inspect,可以从 官网或者 这个仓库下载:
使用 SDK 安装需要到它的安装目录下找到 Inspect.exe,然后运行即可。
C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86

如下图所示,微信是支持 UIA 的

而企业微信只能使用 AirApp 模式,它类似网页中仅有存在一个 Canvas,所有元素都是通过代码绘制渲染,所以只能通过图像识别定位。
企业微信 windows 端是使用 flutter 开发的,flutter 内的控件有自己独立的绘制逻辑,不吃 windows 下面 inspect.exe 那一套